package com.szrt.java.day20170112.ch02;



import java.io.File;
import java.io.FileInputStream;

import org.junit.Test;

import com.szrt.java.utils.ScottFileUtil;

public class FileInputStreamTest {
	
	/**
	 * 字节流    一粒饭                一个英文的字符   阿拉伯数字
	 * 字符流    一个糯米丸子      一个中文字符    2/3粒米的丸子
	 * 
	 * 需求 以相对路径的方式读取  szrt.txt中的内容
	 * 读取文件都是1个固定的套路  陈氏太极拳32式
	 * @throws Exception
	 */
	@SuppressWarnings("resource")
	@Test
	public void fileInputStreamTest() throws Exception {
		
		//1 创建1个File的对象。并且让这个对象指向szrt.txt 把这个文件以字符串的形式作为构造方法的参数
		File szrt = new File("src/com/szrt/java/day20170112/ch02/szrt.txt");
		
		//2 创建1个输入流的对象。并且让这个流指向具体的文件szrt 去哪里?
		FileInputStream  fis = new FileInputStream(szrt);
		
		//3 调用 fis 的具体方法...
		int assii =fis.read();
		System.out.println(assii);
		System.out.println((char)assii);
		
	}
	
	
	
	/**
	 * 1粒米 = 1个字节 = 8 bit
	 * 考虑到1口吃1粒米 太慢   一次性多吃一点
	 * 
	 * 4个英文的字符 = 4字节
	 * 一起吃4粒米
	 * @throws Exception
	 */
	@Test
	public void fileInputStreamTest2() throws Exception {
		
		//1 创建1个File的对象。并且让这个对象指向szrt.txt 把这个文件以字符串的形式作为构造方法的参数
		File szrt = new File("src/com/szrt/java/day20170112/ch02/szrt2.txt");
		
		//2 创建1个输入流的对象。并且让这个流指向具体的文件szrt 去哪里?
		FileInputStream  fis = new FileInputStream(szrt);
		
		//3 调用 fis 的具体方法...
		byte[] b= new byte[4];
		//fis.read(b);
		int len = 0;
		
		while((len =fis.read(b)) !=-1){
			 String aa = new String (b,0,len);
			 System.out.print(aa);
		}
		
		/*for(int index=0; index<b.length;index++){
			System.out.print((char)b[index]);
		}*/
		fis.close();
		
	}
	
	
	@Test
	public void fileInputStreamTest3() throws Exception {
		
		//1 创建1个File的对象。并且让这个对象指向szrt.txt 把这个文件以字符串的形式作为构造方法的参数
		File szrt = new File("src/com/szrt/java/day20170112/ch02/szrt2.txt");
		
		//2 创建1个输入流的对象。并且让这个流指向具体的文件szrt 去哪里?
		FileInputStream  fis = new FileInputStream(szrt);
		
		//3 调用 fis 的具体方法...
		
		
		//你一次性要吃多少粒米  4粒米
		byte[] b= new byte[5];
		
		//实际上吃了多少粒米   7=4+3
		int len= fis.read(b);
		
		System.out.print(len);
		
		
		int counter=1;
		while(len != -1){
			for(int index=0; index<len;index++){
				System.out.print((char)b[index]);
			}
			
			len = fis.read(b);
			System.out.print(len);
			
			if(len!=-1){
				counter = counter+1;
			}
			
		}
		
		//System.out.println(counter);
		fis.close();
		
	}
	
	
	@Test
	public void fileInputStreamTest4() throws Exception {
		
		//1 创建1个File的对象。并且让这个对象指向szrt.txt 把这个文件以字符串的形式作为构造方法的参数
		File szrt = new File("src/com/szrt/java/day20170112/ch02/szrt2.txt");
		
		//2 创建1个输入流的对象。并且让这个流指向具体的文件szrt 去哪里?
		FileInputStream  fis = new FileInputStream(szrt);
		
		//3 调用 fis 的具体方法...
		
		
		//你一次性要吃多少粒米  4粒米
		byte[] b= new byte[5];
		
		//实际上吃了多少粒米   7=4+3
		int len= 0 ;
		
		int counter=0;
		while( (len =fis.read(b)) != -1){
			counter = counter+1;
			String jieguo = new String(b,0,len);
			System.out.print(jieguo);
		}
		fis.close();
		
		System.out.println();
		System.out.println(counter);
		
	}
	
	
	@Test
	public void testName() throws Exception {
		String filePath="src/com/szrt/java/day20170112/ch02/szrt2.txt";
		String xx = ScottFileUtil.readFile(filePath);
		System.out.println(xx);
		
	}

}
